import axiosInstance from './axiosInstance';

/**
 * 用户互动相关API
 */
const interactionApi = {
  /**
   * 点赞视频
   * @param {number} videoId - 视频ID
   * @returns {Promise<Object>} 点赞响应数据
   */
  likeVideo: async (videoId) => {
    try {
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.post('/interactions/like', {
        videoId
      });
      return result;
    } catch (error) {
      console.error('点赞失败:', error);
      throw error;
    }
  },

  /**
   * 取消点赞
   * @param {number} videoId - 视频ID
   * @returns {Promise<Object>} 取消点赞响应数据
   */
  unlikeVideo: async (videoId) => {
    try {
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.post('/interactions/unlike', {
        videoId
      });
      return result;
    } catch (error) {
      console.error('取消点赞失败:', error);
      throw error;
    }
  },

  /**
   * 检查点赞状态
   * @param {number} videoId - 视频ID
   * @returns {Promise<Object>} 点赞状态响应数据
   */
  checkLikeStatus: async (videoId) => {
    try {
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.get('/interactions/like/status', {
        params: {
          videoId
        }
      });
      return result;
    } catch (error) {
      console.error('获取点赞状态失败:', error);
      // 如果出错，默认返回未点赞状态
      return { liked: false, likeCount: 0 };
    }
  },

  /**
   * 收藏视频
   * @param {number} videoId - 视频ID
   * @returns {Promise<Object>} 收藏响应数据
   */
  favoriteVideo: async (videoId) => {
    try {
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.post('/interactions/favorite', {
        videoId
      });
      return result;
    } catch (error) {
      console.error('收藏失败:', error);
      throw error;
    }
  },

  /**
   * 取消收藏
   * @param {number} videoId - 视频ID
   * @returns {Promise<Object>} 取消收藏响应数据
   */
  unfavoriteVideo: async (videoId) => {
    try {
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.post('/interactions/unfavorite', {
        videoId
      });
      return result;
    } catch (error) {
      console.error('取消收藏失败:', error);
      throw error;
    }
  },

  /**
   * 检查收藏状态
   * @param {number} videoId - 视频ID
   * @returns {Promise<Object>} 收藏状态响应数据
   */
  checkFavoriteStatus: async (videoId) => {
    try {
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.get('/interactions/favorite/status', {
        params: {
          videoId
        }
      });
      return result;
    } catch (error) {
      console.error('获取收藏状态失败:', error);
      // 如果出错，默认返回未收藏状态
      return { favorited: false, collect_count: 0 };
    }
  },

  /**
   * 获取视频评论列表
   * @param {number} videoId - 视频ID
   * @param {Object} pagination - 分页参数
   * @param {number} pagination.page - 页码，默认为1
   * @param {number} pagination.pageSize - 每页数量，默认为10
   * @returns {Promise<Object>} 评论列表响应数据
   */
  getComments: async (videoId, { page = 1, pageSize = 10 } = {}) => {
    try {
      // 移除重复的'/api/'前缀，因为axiosInstance的baseURL已经包含了
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.get(`/interactions/comments/${videoId}`, {
        params: { page, pageSize }
      });
      return result;
    } catch (error) {
      console.error('获取评论失败:', error);
      throw error;
    }
  },

  /**
   * 创建评论
   * @param {Object} commentData - 评论数据
   * @param {number} commentData.videoId - 视频ID
   * @param {string} commentData.content - 评论内容
   * @param {number|null} commentData.parentId - 父评论ID（回复评论时使用）
   * @returns {Promise<Object>} 创建评论响应数据
   */
  createComment: async (commentData) => {
    try {
      // 移除重复的'/api/'前缀，因为axiosInstance的baseURL已经包含了
      // 由于axiosInstance的响应拦截器已经返回response.data，直接返回结果即可
      const result = await axiosInstance.post('/interactions/comments', commentData);
      return result;
    } catch (error) {
      console.error('创建评论失败:', error);
      throw error;
    }
  },

  /**
   * 删除评论
   * @param {number} commentId - 评论ID
   * @returns {Promise<Object>} 删除评论响应数据
   */
  deleteComment: async (commentId) => {
    try {
      const response = await axiosInstance.delete(`/api/interactions/comments/${commentId}`);
      return response;
    } catch (error) {
      console.error('删除评论失败:', error);
      throw error;
    }
  }
};

export default interactionApi;